<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="java.util.*,org.lanqiao.tjut.bean.Student"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE>
<html>
<head>
<meta charset="UTF-8">
<title>jsp核心标签</title>
</head>
<body>
	<!-- 向指定的缓存对象存入相关的值 等价于：request.getAttribute -->
	<c:set scope="request" var="userName4" value="userName4"></c:set>
	<!-- out标签可以将el表达式解析的值输出到浏览器客户端页面：
		el表达式：格式 ${需要解析的数据结果的表达式}
		requestScope.userName4 -- 从request缓存里面取出缓存变量名字为userName4的对象的值
		另外，requestScope可以省略，如果省略缓存级别前缀的话：则el表达式在解析时，
		会依次从pageContext、reqeust、session、application等依次进行查找。
	 -->
	<c:out value="out标签输出的值：${requestScope.userName4 }"></c:out>
	<!-- if条件判定标签 -->
	<c:if test="${requestScope.userName4 =='userName4' }">
		<p>当前request对象中缓存的对象的值为：userName4</p>
	</c:if>
	<!-- if-else标签的使用 :注意 when 和 otherwise表面必须和 choose标签进行搭配使用-->
	<c:choose>
		<c:when test="${requestScope.userName4 =='userName4' }">
			<p>when:标签当前request对象中缓存的对象的值为：userName4</p>
		</c:when>
		<c:when test="${requestScope.userName4 =='userName3' }">
			<p>when:标签当前request对象中缓存的对象的值为：userName3</p>
		</c:when>
		<c:otherwise>
			<p>otherwise:标签</p>
		</c:otherwise>
	</c:choose>


	<!-- 删除指定缓存级别的指定的缓存名字的缓存变量对象 等价于：request.removeAttribute -->
	<%-- <c:remove var="userName4" scope="request"/> --%>
	<%
		// if标签等价于如下代码
		Object obj = request.getAttribute("userName4");
		if (obj != null && obj.toString().equals("userName4")) {
			out.write("<p>当前request对象中缓存的对象的值为：userName4</p>");
		}

		// 打印set标签设置的内容
		out.println("<br>set标签设置的变量userName4：" + request.getAttribute("userName4") + "<br>");

		// 在session缓存对象中，缓存一个list对象
		List lst = new ArrayList();
		lst.add("张三");
		lst.add("lisi");
		lst.add("wangwu");
		// 将lst缓存到session中
		session.setAttribute("lst01", lst);

		List lst02 = new ArrayList();
		Map map = new HashMap();
		map.put("姓名", "zhangsan");
		map.put("年龄", 23);
		map.put("性别", "男");
		// 将map放入list中
		lst02.add(map);
		Map map01 = new HashMap();
		map01.put("姓名", "lisi");
		map01.put("年龄", 21);
		map01.put("性别", "女");
		// 将map放入list中
		lst02.add(map01);
		// 将lst缓存到session中
		session.setAttribute("lst02", lst02);

		List lst03 = new ArrayList();
		// 创建一个student对象
		Student stu01 = new Student("张三", "15000101", 23);
		lst03.add(stu01);
		// 创建一个student对象
		Student stu02 = new Student("lisi", "15000102", 25);
		lst03.add(stu02);
		// 将lst缓存到session中
		session.setAttribute("lst03", lst03);

		// 缓存一个时间对象
		session.setAttribute("dateNow", new Date());
	%>

	<!-- foreach标签是一个迭代标签，可以将el表达解析的数据值进行迭代显示，等价于java语言的 for、while、iterator等迭代循环处理
	 foreach标签的作用是将一个数据集数据进行解析显示
 -->
	<!-- foreach标签的简单的迭代显示： 
	begin:遍历开始的值或数据结构开始的下标位置；
	end：遍历结束的值或数据结构结束的下标位置；
	varStatus：是当前遍历对象的状态信息：四个属性:index、count、fist和last；
	step：迭代遍历时每次自增的步长；
	var：每次迭代遍历的对象的值；（也就是每次迭代得到的当前被遍历的值，会放在缓存中变名为var指定的名字的变量中）
	可以使用el表达式将缓存中的值取出
	items:要遍历的集合对象，一般使用el表达式取出
-->
	<hr>
	<c:out value="${sessionScope.lst01[1] }"></c:out>
	<c:out value="${sessionScope.lst02[1]['年龄'] }"></c:out>
	<c:out value="${sessionScope.lst03[1].stuName }"></c:out>
	<hr>

	<c:forEach var="eachVal" begin="1" end="10" varStatus="st" step="1">
		<p>遍历${st.index }行，遍历显示的值为：${eachVal}</p>
	</c:forEach>
	<hr>
	<p>使用foreach标签遍历lst对象</p>
	<c:forEach items="${sessionScope.lst01 }" var="eachVal" varStatus="st">
		<p>遍历${st.index+1 }行，遍历显示的值为：${eachVal}</p>
	</c:forEach>

	<hr>
	<p>使用foreach标签遍历lst02对象</p>
	<c:forEach items="${sessionScope.lst02 }" var="eachMap" varStatus="st">
		<c:forEach items="${eachMap}" var="eachEntry" varStatus="st01">
			<p>遍历${st01.index+1 }行，遍历显示的Map的值为Key：${eachEntry.key},
			value:${eachEntry.value}</p>
		</c:forEach>

	</c:forEach>

	<hr>
	<p>使用foreach标签遍历lst03对象</p>
	<c:forEach items="${sessionScope.lst03 }" var="eachStu" varStatus="st">
		<p>遍历${st.index+1 }行，学生姓名：${eachStu.stuName},学生学号:${eachStu.stuNum}
			学生年龄：${eachStu.stuAge}</p>

	</c:forEach>

	<hr>
	<p>日期格式化标签</p>
	<c:out value="${sessionScope.dateNow }"></c:out>
	<br>
	<fmt:formatDate value="${sessionScope.dateNow }"
		pattern="yyyy-MM-dd HH:mm:ss" />
	<hr>
	${fn:escapeXml('<p>数字格式化标签</p>') }
	<br>
	<fmt:formatNumber value="12321312000" pattern="#,###.00#"></fmt:formatNumber>
	<hr>
	&lt;p&gt;日期转换标签&lt;/p&gt;
	<br>
	<fmt:parseDate value="2017/07/21" pattern="yyyy/MM/dd"></fmt:parseDate>
	<br>
	<fmt:parseDate value="2017/07/21" pattern="yyyy/MM/dd" var="date01"
		scope="request"></fmt:parseDate>
	<fmt:formatDate value="${requestScope.date01 }"
		pattern="yyyy-MM-dd HH:mm:ss" />
<body>
</html>